import { IndexDB } from "./IndexDB";
/**
 * IndexDB前端缓存辅助
 * @class
 * @memberof w
 * @example
 * DBHelper.getInstance().open("dbname",db=>{
 *      //增删改查数据
 * })
*/
class DBHelper {
    static instance = null;
    /**
     * DBHelper构造函数
     * @constructor
     */
    constructor() {
        this.dbs = new Map();
    }
    /**
     * 单例模式获取DBHelper对象。
     * @method
     * @return {w.DBHelper}
     */
    static getInstance(){
        if(!DBHelper.instance){
            DBHelper.instance=new DBHelper();
        }
        return DBHelper.instance;
    }
    /**
     * 回调方式打开一个数据库
     * @method
     * @param {String} name 要打开的数据库名称，如果不存在则创建，否则打开已经存在的数据库。
     * @param {Function} callback 数据库打开成功后的回调函数。
     * @return {w.IndexDB} 返回的数据库对象。
     */
    open(name,callback) {
        let db=this.get(name);
        if (!db) {
            new IndexDB(name,1).open(e=>{
                this.dbs.set(name,e);
                if(callback){
                    callback(e);
                }
            });
        }else{
            callback(db);
        }
    }
    /**
     * 异步方式打开一个数据库
     * @method
     * @param {String} name 要打开的数据库名称，如果不存在则创建，否则打开已经存在的数据库。
     * @example
     * DBHelper.getInstance().openPromise("mydb").then((db)=>{
     *      //操作数据库
     * })
     * const db=await DBHelper.getInstance().openPromise("mydb");
     * //操作数据库
     * @return {w.IndexDB} 返回的数据库对象。
     */
    async openPromise(name){
        let db=this.get(name);
        if (!db) {
            db=new IndexDB(name,1);
            await db.openPromise();
            this.dbs.set(name,db);
        }
        return db;
    }
    /**
     * 根据名称获取已经创建过的数据库，如无，则返回undefine。
     * @param {String} name 数据库名称
     * @return {w.IndexDB} 返回的数据库对象。
     */
    get(name){
        return this.dbs.get(name);
    }
}
export { DBHelper }